package com.dc.commons.utils;

import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;

import com.dc.commons.query.DcQuery;
import com.dc.commons.utils.excel.ExcelCovert;
import com.dc.commons.utils.excel.ExcelData;
import com.dc.commons.utils.excel.ImportFormat;
import com.dc.commons.utils.excel.RowData;
import com.google.common.collect.Lists;

/*******************************************************************************<P>
 * 文件名: ExcelImportor.java <br>
 * 版本: 1.0<br>
 * 描述:<br>
 * 版权所有: <br>
 * <P>
 * 创建者: 王建栋 <br>
 * 创建日期: 2016年6月7日 下午1:20:26<br>
 * 修改者: <br>
 * 修改日期: <br>
 * 修改说明: <br>
 ******************************************************************************/
public class ExcelImportor {


	/**
	 * 将Excel数据 转换为对象
	 * @param dcQuery
	 * @param data
	 * @param clazz
	 * @return List<T>
	 */
	public List<T> importData(DcQuery dcQuery,ExcelData data,Class<T> clazz){
		ImportFormat<T> format=getImportorFormat(dcQuery.getExceltMap(), clazz);
		List<T> list=Lists.newArrayList();
		for(RowData row:data.getRows()){
			T t=format.convert(row);
			list.add(t);
		}
		return list;
	}
	
	/**
	 * 将Excel数据 转换为对象
	 * @param excelMap 格式 key=序号_代码<br>
					       value=名称 <br>
	 * @param data
	 * @param clazz
	 * @return List<T>
	 */
	public List<T> importData(Map<String,String> excelMap,ExcelData data,Class<T> clazz){
		ImportFormat<T> format=getImportorFormat(excelMap, clazz);
		List<T> list=Lists.newArrayList();
		for(RowData row:data.getRows()){
			T t=format.convert(row);
			list.add(t);
		}
		return list;
	}
	
	
	/**
	 *  配置的 格式为 <br>
	  	key=序号_代码<br>
		value=名称 <br>
		value 主要还做页面参考用，后台没有用
	 * @param excelMap
	 * @param clazz
	 * @return ImportFormat
	 */
	private ImportFormat<T> getImportorFormat(Map<String,String> excelMap,Class<T> clazz){
		ImportFormat<T> format=null;
		List<String> fields=Lists.newArrayList();
		List<String> keys=Lists.newArrayList();
		for(String key:excelMap.keySet()){
			keys.add(key);
		}
		Collections.sort(keys);
		
		for(final String key:keys){
			final Object value=excelMap.get(key);
			final String field=key.substring(key.indexOf("_")+1);
			if(value!=null&&StringUtils.isNotEmpty(value.toString())){
				fields.add(field);
			}
		}
		format =new ExcelCovert.DefaultImportFormat<T>(fields, clazz);
		
		return format;
	}
	
}
